package `03-dsl`.dsl01

fun main() {
    /**
     * dsl Domain Special Language 领域特定语言，比较成功的dsl语言有：json、gradle、compose
     * dsl格式编写UI，
     * 分析：
     * 1.layout是函数，该函数有一个函数类型的参数，该参数的实现体是layout后的{}内实现
     * 2.button和text也是同layout一样。
     * 3.因button和text函数在layout函数参数的实现体内，可以理解为是this.button/this.text，this被省略，那this是谁呢？在哪决定呢？
     * 4.this是在layout函数声明处使用扩展函数声明，确定this属于哪个类。
     *
     * 实现
     * 1.layout参数实现体中的this，用Layout类
     * 2.将button和text函数 在Layout类中实现
     */
    layout{
        button{

        }
        text{

        }
    }
}

class Layout{
    inline fun button(action: Layout.()->Unit){

    }

    inline fun text(action: Layout.()->Unit){

    }
}
inline fun layout(action: Layout.()->Unit){

}